package com.qzsoft.zhjd.server.socket.utils;

/**
 * @ClassName CRCUtils
 * @Description CRC校验
 * @author linhuawei
 * @since 2022-02-23
 */
public class CRCUtils {

    /**
     * @Title getCheck
     * @Description 获取数据CRC16校验位
     * @param data 需要校验的数据
     * @return CRC16校验位
     */
    public static String getCheck(String data) {
        return getCheck(data.getBytes());
    }

    /**
     * @Title getCheck
     * @Description 获取数据CRC16校验位
     * @param bytes 需要校验的数据
     * @return CRC16校验位
     */
    public static String getCheck(byte[] bytes) {
        int crc = 0xFFFF;
        for (int i = 0, len = bytes.length; i < len; i++) {
            crc = (crc >> 8) ^ (bytes[i] & 0xFF);
            for (int j = 0; j < 8; j++) {
                if (0x0001 == (crc & 0x0001)) {
                    crc = crc >> 1;
                    crc = crc ^ 0xA001;
                } else {
                    crc = crc >> 1;
                }
            }
        }

        String crcStr = Integer.toHexString(crc);
        if (4 > crcStr.length()) {
            crcStr = "0000" + crcStr;
            return crcStr.substring(crcStr.length() - 4);
        } else {
            return crcStr;
        }
    }

}
